package controller;

import HibernateConfig.HibernateUtil;
import java.util.List;
import model.Ciudad;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

public class CiudadController {

    Session sf = HibernateUtil.getSessionFactory().openSession();

    public List<Ciudad> buscarTodasCiudades(Ciudad ciudad) {

        Session sf = HibernateUtil.getSessionFactory().openSession();

        Transaction transaccion = null;
        List<Ciudad> ciudades = null;

        try {
            transaccion = sf.beginTransaction();
            Criteria cr = sf.createCriteria(Ciudad.class);
            if (ciudad != null) {
                if (!("".equals(ciudad.getCiudad()))) {
                    cr.add(Restrictions.like("ciudad", ciudad.getCiudad() + "%"));
                }
            }

            ciudades = cr.list();

        } catch (HibernateException e) {
            transaccion.rollback();
            e.printStackTrace();
        } finally {
            sf.close(); // cierro la sesion (BD)
        }
        return ciudades;
    }

    public Ciudad buscarCiudadxNombre(String nombCiudad) {
        Session sf = HibernateUtil.getSessionFactory().openSession();
        Transaction transaccion = sf.beginTransaction();
        Ciudad ciudadEnc = null;

        String hql = "FROM Ciudad c  WHERE ciudad = '" + nombCiudad+"'";

        List lsCiudad = sf.createQuery(hql).list();
        sf.close();
        ciudadEnc = (Ciudad) lsCiudad.get(0);
        return ciudadEnc;
    }

    public static void actualizarCiudad(Ciudad ciudad) {
        Transaction transaccion = null;
        try {
            transaccion = ConexionBDHibernate.getSesion().beginTransaction();

            ConexionBDHibernate.getSesion().saveOrUpdate(ciudad);
            transaccion.commit();

            // atrapo excepciones    
        } catch (HibernateException e) {
            transaccion.rollback();
            e.printStackTrace();
        } finally {
            ConexionBDHibernate.getSesion().close(); // cierro la sesion (BD)
        }
    }
}
